所謂的「Bean 的初始化」,就是指「在 Bean 被創建出來之後,對這個 Bean 去做一些初始值的設定」,譬如說把他內部的變數的值設定成 5、或是進行一些運算之類的,反正就是對這個 Bean 去做初始的出廠設定就對了。
舉例來說,如果我們想要改寫上面的 HpPrinter,將他裡面的 count 變數的值「初始化成 5」的話,那麼我們就可以這樣做:
首先我們先在 HpPrinter 新增一個新的方法 initialize()
,並且在這個方法上面,加上一行 @PostConstruct
,這樣我們等一下就可以在這個方法中, 去初始化 Bean 的值。
@PostConstruct
public void initialize() {
count = 5;
}
像是我們可以在 initialize()
的方法中,去初始化這個 Bean 的值,譬如說我們可以把 count 的值設成 5,就可以將 count 變數的值初始化成 5。
所以到時候,當 Spring Boot 創建出 hpPrinter 這個 Bean 之後,Spring Boot 就會接著去執行 initialize()
方法,將 count 的設定成 5,進而就可以完成 Bean 的初始化了!
請問不能直接使用建構子來初使 count 的數值嗎?
建構子也是可以拿來初始化的!
只是就如同文中的「補充 1:我們真的需要 @PostConstruct
嗎?」提到的,使用 @PostConstruct
來初始化的強項在於 「@PostConstruct
可以進行複雜的初始化」,所以通常在 Spring Boot 中,還是會優先使用 @PostConstruct
來進行初始化!
建構子不是一樣能進行複雜的初始化嗎? 這樣一說,請教建構子跟 @PostConstruct 的順序,應該是先建構子,等建構完成後,接著才會執行 @PostConstruct 對嗎?
如果建構子也能進行複雜的始化,與 @PostConstruct 的差異是什麼?